/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managers;

import conexionBD.ConexionServidor;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.jsf.FacesContextUtils;

/**
 *
 * @author Juan Jose
 */
@ManagedBean
@SessionScoped
public class managerCrearUsuario implements Serializable {

    WebApplicationContext permisos = FacesContextUtils.getRequiredWebApplicationContext(FacesContext.getCurrentInstance());
    JdbcTemplate jdbcTemplate = (JdbcTemplate) permisos.getBean("jdbcTemplate");
    private String primernombre;
    private String segundonombre;
    private String primerapellido;
    private String segundoapellido;
    private String dui;
    private String email;
    private String nombreusuario;
    private boolean estadousuario;
    private Integer password;
    private String perfilSeleccionado;
    private boolean estadoSeleccionado;
    List<SelectItem> perfiles = new ArrayList<SelectItem>();

    public String getDui() {
        return dui;
    }

    public void setDui(String dui) {
        this.dui = dui;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isEstadoSeleccionado() {
        return estadoSeleccionado;
    }

    public void setEstadoSeleccionado(boolean estadoSeleccionado) {
        this.estadoSeleccionado = estadoSeleccionado;
    }

    public boolean isEstadousuario() {
        return estadousuario;
    }

    public void setEstadousuario(boolean estadousuario) {
        this.estadousuario = estadousuario;
    }

    public String getNombreusuario() {
        return nombreusuario;
    }

    public void setNombreusuario(String nombreusuario) {
        this.nombreusuario = nombreusuario;
    }

    public String getPerfilSeleccionado() {
        return perfilSeleccionado;
    }

    public void setPerfilSeleccionado(String perfilSeleccionado) {
        this.perfilSeleccionado = perfilSeleccionado;
    }

    public List<SelectItem> getPerfiles() {
        ConexionServidor myConexion = new ConexionServidor();
        List<SelectItem> perfiless = new ArrayList<SelectItem>();
        perfiless.add(new SelectItem("null", "-seleccione uno-"));
        try {
            Connection con = myConexion.getConnection();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("SELECT IDPERFIL, NOMBREPERFIL FROM PERFIL");
            while (rs.next()) {
                perfiless.add(new SelectItem(rs.getInt("idperfil"), rs.getString("nombreperfil")));
            }
            rs.close();
            st.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return perfiless;
    }

    public void setPerfiles(List<SelectItem> perfiles) {
        this.perfiles = perfiles;
    }

    public WebApplicationContext getPermisos() {
        return permisos;
    }

    public void setPermisos(WebApplicationContext permisos) {
        this.permisos = permisos;
    }

    public String getPrimerapellido() {
        return primerapellido;
    }

    public void setPrimerapellido(String primerapellido) {
        this.primerapellido = primerapellido;
    }

    public String getPrimernombre() {
        return primernombre;
    }

    public void setPrimernombre(String primernombre) {
        this.primernombre = primernombre;
    }

    public String getSegundoapellido() {
        return segundoapellido;
    }

    public void setSegundoapellido(String segundoapellido) {
        this.segundoapellido = segundoapellido;
    }

    public String getSegundonombre() {
        return segundonombre;
    }

    public void setSegundonombre(String segundonombre) {
        this.segundonombre = segundonombre;
    }

    public void agregar() {
        password = (int) (Math.random() * 10000);
        //System.out.println(this.password);
        //System.out.println(this.estadoSeleccionado);
        Integer correcto = 1;
        String sql = "";
        sql = "INSERT INTO USUARIO VALUES (nextval('usuarioseq'), ('" + this.primernombre + "'),('" + this.segundonombre + "'),('" + this.primerapellido + "'),('" + this.segundoapellido + "'),('" + this.nombreusuario + "')," + this.password + "," + this.dui + ",('" + this.email + "')," + this.estadoSeleccionado + ")";
        try {
            jdbcTemplate.execute(sql);
        } catch (DataAccessException e) {
            System.out.println(e.getMessage());
            correcto = 0;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Este Usuario ya existe", "Ingrese otro usuario"));
        }
        if (correcto == 1) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Usuario Creado ", "Su Nombre de usuario es: " + this.nombreusuario + " Su clave de acceso es: " + this.password + ""));
            sql = "";
            sql = "INSERT INTO PERFIL_MIEMBRO VALUES (NEXTVAL('perfil_miembroseq'),(select idusuario from usuario where nombreusuario = ('" + this.nombreusuario + "'))," + this.perfilSeleccionado + ")";
            jdbcTemplate.execute(sql);
        }
        limpiar();
    }

    public void addInfo(ActionEvent actionEvent) {
        //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Usuario Creado", " "));
    }
    public void limpiar(){
        primernombre = "";
        primerapellido = "";
        segundonombre = "";
        segundoapellido = "";
        dui = "";
        perfilSeleccionado = null;
        email = "";
        estadoSeleccionado = false;
        nombreusuario = "";
    }
}
